/*
Autor: Alexander Savochkin, 2010
New BSD License
*/

#pragma once

#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost::posix_time;

//This function defines interface to regulated object
namespace SRCLF 
{
namespace IO
{
  	/**
	@class IOperatedOutput
	@brief Abstract class which represents "output" for regulator
	*/
	class IOperatedOutput
	{
	public:
		IOperatedOutput(){};
		virtual ~IOperatedOutput() {};
		//
		virtual bool open() = 0;
		virtual void setOutput(double dVal) = 0;
		virtual double getOutput() = 0;

		virtual void update(const ptime&) = 0;

		virtual void adminCommand(const string& command, string& result) = 0;
		virtual void controlCommand(const string& command, string& result) = 0;
		virtual void infoCommand(const string& command, string& result) = 0;

		virtual void close() = 0;
	};
} //namespace IO
} //namespace SRCLF
